package com.study.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;

import javax.sql.DataSource;

@EnableWebSecurity// 这个注解是告诉Spring这个类是一个SpringSecurity配置类
@Configuration// 这个注解是告诉Spring这个类是一个配置类,并且Spring会自动加载这个类,从而实现SpringSecurity的配置
public class SecurityConfiguartion {

    //  我们需要使用ThymeleafViewResolver作为视图解析器，并解析我们的HTML页面
    @Bean
    public BCryptPasswordEncoder PasswordEncoder(){//这个Bean是用来配置密码加密的
        return new BCryptPasswordEncoder();
    }
    // 这个Bean是用来配置密码加密的

    @Bean
    public PersistentTokenRepository tokenRepository(DataSource dataSource){
        JdbcTokenRepositoryImpl repository = new JdbcTokenRepositoryImpl();
        //在启动时自动在数据库中创建存储记住我信息的表，仅第一次需要，后续不需要
        repository.setDataSource(dataSource);// 设置数据源,从而实现数据库的连接
        return repository;
    }

}
